//管理所有的权限路由

//导入所有的静态路由 & 动态路由
import { constantRoutes, asyncRouters } from '@/router/index'

const state = {
  routes: constantRoutes
}
const mutations = {
  // 设置动态路由
  SET_ROUTES (state, payload) {
    // 将动态路由与静态路由进行合并
    //payload : 将来要添加的路由
    state.routes = [...constantRoutes, ...payload]
  }
}
const actions = {
  //筛选动态路由
  //context：当前vuex对象    menus:当前登录用户的权限列表
  setRoutes (context, menus) {
    //得到当前项目中的动态路由
    //再从动态路由中筛选出menus对应的路由对象
    const newMenus = asyncRouters.filter(item => {
      return menus.some(subitem => {
        return subitem === item.name
      })
      //some方法会返回一个布尔值，如果是true，说明当前Item路由就是当前用户的权限路由，反之则不是
    })
    //再将路由对象赋值给routes,得到了完整的路由(包括静态路由和动态路由)
    context.commit('SET_ROUTES', newMenus)
    //将动态路由返回给外界，也是一个伏笔
    return newMenus
  }
}

//暴露出去
export default {
  namespaced: true,
  state,
  mutations,
  actions
}
